iT邦幫忙

2023 iThome 鐵人賽

DAY 16
1
Odoo

Odoo開發系列 第 16

[Day 16]odoo14 - Inherit介紹(一)

  • 分享至 

  • xImage
  •  

今天換來介紹在odoo中非常重要的一個功能,也就是inherit(繼承)。
Odoo原生的模組裡已經有非常多的功能了,但針對每個使用者的產業或是使用情境不同,可能會有原生的欄位或功能不能完全滿足的情況發生。這時候就會使用到繼承的功能了,下面來詳細的說明。

今天先來介紹繼承model的部分,在繼承任何一個model時,記得在__manifest__.py的depands中加上要繼承的model所屬的模組,才能夠做後續的動作,下面以繼承銷售模組為例。

    'depends': ['base', 'sale']

在一般新建model是使用_name

class IDXRepair(models.Model):
    _name = 'idx.repair'

但在繼承時則要使用_inherit,再填上需要繼承的model,就可以在原有的model下新增客製欄位或是客製function了。

class SaleOrderInherit(models.Model):
    _inherit = 'sale.order'

新增客製欄位的方法跟一般新建model時建立欄位的做法相同,這邊就不再多說。

但關於原生的function在繼承時,有兩種用法:
1.修改原生的function,使用此種繼承方法,只要將原生的function全部複製下來,貼在客製模組的檔案下,就可以將整段function進行改寫。
2.以原生的function為基礎加上客製的邏輯來擴充需要的功能,不會更改到原生的function,在撰寫function使用super(),在程式執行到這行時會先做原生function的處理,再回到客製的程式做後續處理,下面以擴充原生的create為範例。

from odoo import api, fields, models, _

class SaleOrder(models.Model):
    _inherit = 'sale.order'

    @api.model
    def create(self, vals):
        # 可加入客製邏輯
        super(SaleOrder, self).create(vals)
        # 可加入客製邏輯

關於model的繼承就先講解到這邊,關於畫面的繼承讓我們等到明天再來仔細講解。


上一篇
[Day 15]odoo14 - data及demo介紹
下一篇
[Day 17]odoo14 - Inherit介紹(二)
系列文
Odoo開發30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言